# ADB

ADB(Android Debug Bridge)는 안드로이드 기기와 통신할 수 있는 명령어 도구입니다. ADB를 사용하면 윈도우의 계열 명령 프롬프트나 리눅스 계열의 터미널처럼 연결된 기기에 접근할 수 있습니다.

ADB는 안드로이드 SDKPlatform Tools에 포함되어 있습니다.

$ pwd
/Users/[your_username]/Library/Android/sdk/platform-tools

$ ls
adb
...

어느 위치에서든 ADB 명령어를 사용하려면 아래와 같이 경로 설정을 해야합니다.

$ cd ~ 

$ echo '/Users/[your_username]/Library/Android/sdk/platform-tools' >> ~/.bash_profile

$ source ~/.bash_profile

이제 adb --help 명령어를 입력하면 ADB와 관련된 옵션들을 확인할 수 있습니다.

$ adb --help
Android Debug Bridge version 1.0.41
Version 31.0.0-7110759
Installed as /usr/local/bin/adb

global options:
 -a         listen on all network interfaces, not just localhost
 -d         use USB device (error if multiple devices connected)
 -e         use TCP/IP device (error if multiple TCP/IP devices available)
 -s SERIAL  use device with given serial (overrides $ANDROID_SERIAL)
 -t ID      use device with given transport id
 -H         name of adb server host [default=localhost]
 -P         port of adb server [default=5037]
 -L SOCKET  listen on given socket for adb server [default=tcp:localhost:5037]

general commands:
 devices [-l]             list connected devices (-l for long output)
 help                     show this help message
 version                  show version num
...

안드로이드는 리눅스 기반의 운영체제입니다. 따라서 연결된 기기의 리눅스 쉘에 접속할 수 있습니다. 이 때는 adb shell 명령어를 사용합니다.

$ adb shell

이제 연결된 기기의 디렉토리 구조를 확인할 수 있습니다.

$ ls
bin
data
sdcard
storage
dev
sys
system
...

# 자주 쓰는 adb 명령어

adb devices명령어를 사용하면 실제 기기와 정상적으로 연결되었는지 확인할 수 있습니다.

$ adb devices
List of devices attached
R3CN109JVFK     device
R332AEW32AA     device
R3CN238IKEF     offline
상태 설명
offline 기기가 연결되지 않았거나 비정상인 경우
device 정상적으로 기기가 연결된 경우
no device 연결된 기기가 없는 경우

adb reboot명령어를 사용하면 기기를 재시작할 수 있습니다.

$ adb reboot

PC에서 안드로이드 기기로 파일을 복사할 수도 있습니다.

$ adb push "파일 명" "복사할 경로"

$ adb push backup.zip /sdcard

안드로이드 기기에서 PC로 파일을 복사할 수도 있습니다.

$ adb pull "파일 명" "복사할 경로"

$ adb pull /sdcard/log.txt .

APK 파일을 직접 설치할 수도 있습니다.

$ adb install [app_name].apk

$ adb install my_app.apk

앱을 삭제할 수도 있습니다.

$ adb uninstall [package_name]

$ adb uninstall com.yologger.package

연결된 기기의 시스템 정보를 가져올 수 도 있습니다.

$ adb shell dumpsys

아래와 같이 액티비티와 태스크의 스택을 확인할 때 많이 사용합니다.

$ adb shell dumpsys activity activities

위 명령어를 입력하면 너무 방대한 정보가 한꺼번에 출력됩니다. 따라서 여러 옵션과 grep을 적절히 활용하여 필요한 정보만 출력할 수 있습니다.

$ adb shell dumpsys activity activities | grep -i [package_name] | grep -i Hist

$ adb shell dumpsys activity activities | grep -i com.yologger.activity | grep -i Hist

# 액티비티 스택 확인하기

ADB(Android Debug Bridge)를 사용하면 현재 앱에서 실행 중인 모든 서비스를 확인할 수 있습니다.

adb shell 명령어를 사용하면 연결된 기기에 접속할 수 있습니다.

$ adb shell 

dumpsys 명령어를 사용하면 모든 서비스를 확인할 수 있습니다.

> dumpsys 

다음과 같이 호출할 수도 있습니다.

$ adb shell dumpsys 

현재 기기에서 실행 중인 태스크와 액티비티만을 확인할 수 있습니다.

$ adb shell dumpsys activity activities

특정 앱의 태스크와 액티비티만 확인할 수도 있습니다.

$ adb shell dumpsys activity activities | grep -i [package_name] | grep -i Hist

$ adb shell dumpsys activity activities | grep -i com.yologger.myapp | grep -i Hist